// 主要操作数据库暴露出来的接口  

// 获取mongoose
const mongoose = require("mongoose");

//get 列表数据
const get = async ({ curPage, eachPage }) => {
    // 强制转换类型 number转string
    (curPage = ~~curPage), (eachPage = ~~eachPage);
    const data = {
        total: 0,
        maxPage: 0,
        rows: [],
    };

    //mongoose.model传三个参数是创建  传一个参数是获取
    const moviesModel = mongoose.model("movies");
    // 获取当前model映射的那个集合里存在的文档总数
    data.total = await moviesModel.countDocuments();
    // Math.ceil往上取整
    data.maxPage = Math.ceil(data.total / eachPage);
    // find查询所有数据 findOne查询满意结果的第一条
    // populate("gradle") 填充涉及到数据 一对多
    // skip跳过多少条开始查找 
    //limit 查询多少条数据
    // sort 排序
    //execute 立即执行
    const skipNum = (curPage - 1) * eachPage;
    data.rows = await moviesModel.find().skip(skipNum).limit(eachPage).sort({ _id: -1 }).exec();
    return data;

};

// 暴露一个getOne的接口
const getOne = async _id => {
    const moviesModel = mongoose.model("movies");
    return await moviesModel.findOne({ _id });
}

// 新增电影 获取到数据返回给routes接收到参数将数据发送到页面
const add = async ({ cname, ename, type, area, time, upDate, score, count, intro, isClassic, director, actor
}) => {
    // 获取到
    const moviesModel = mongoose.model("movies");
    //获取电影模型数据  create新插入一组数据
    return await moviesModel.create({cname, ename, type, area, time, upDate, score, count, intro, isClassic, director, actor});
   
}
// update做修改 query查询条件  params需要修改的数据
 const update = async (query, params) => {
    const moviesModel = mongoose.model("movies");
    // updateOne更新符合条件的第一个文档
    return await moviesModel.updateOne(query, params);
}
// 海报
const updatePoester = async (query, params) => {
    const moviesModel = mongoose.model("movies");
    // updateOne更新符合条件的第一个文档
    return await moviesModel.updateOne(query, params);
}

// 删除数据 第一步删除浏览器数据 第二步删除后台数据 删除图片
const delImg = async ({ _id, url }) => {
    const moviesModel = mongoose.model("movies");
    const student = await moviesModel.findOne({ _id });//拿到
    student.imgs.pull(url);//删除node.js里的数据
    await student.save(); //删除的数据更新到数据库
}
// 删除海报对应的数据
const delPoster = async ({ _id, url }) => {
    const moviesModel = mongoose.model("movies");
    const student = await moviesModel.findOne({ _id });//拿到
    student.poster.pull(url);//删除node.js里的数据
    await student.save(); //删除的数据更新到数据库
}

// 按钮删除数据
const deleteBtn = async _id => {
    const moviesModel = mongoose.model("movies"); //获取电影模型
    await moviesModel.remove({ _id })//通过model的方法删除id
    // 判断id是否存在
    const data = moviesModel.findOne({ _id });
    const status = true;
    if (data) {
        return status;
    }
}
// 修改数据
const reviseBtn = async _id => {
    const moviesModel = mongoose.model("movies"); //获取电影模型
    await moviesModel.updateOne({ _id }, { cname, ename, type, area, time, upDate, score, count, intro, isClassic, director, actor })
    const data = { status: true };
    return data;
}


// 获取电影院对应放映厅的数据
const find = async ({ isClassic, type }) => {
    // 引入放映厅模型
    const moviesModel = mongoose.model("movies");
    // 判断哪个值没有选中
    if (type == 1) {
        console.log(isClassic);
        // 调用model身上find方法查询并返回查询数据
        return await moviesModel.find({ isClassic});
    } else if (!isClassic) {
        console.log("in");
        // 调用model身上find方法查询并返回查询数据
        return await moviesModel.find({ type });
    }
    // 添加文档到模型
    return await moviesModel.find({ isClassic, type:type });

}

// 获取热门电影
const getHot = async () => {
    const moviesModel = mongoose.model("movies");
    // updateOne更新符合条件的第一个文档
    return await moviesModel.find().limit(8).exec();
}

// 获取所有电影
const getAll = async () => {
    const moviesModel = mongoose.model("movies");
    // updateOne更新符合条件的第一个文档
    return await moviesModel.find();
}

// 模糊查询
const findInfo = async (str) => {
    const moviesModel = mongoose.model("movies");
    const data = await moviesModel.find({"cname":{"$regex": `${str}`}});
    return data;
}

module.exports = { get, add, getOne, update, delImg, deleteBtn, reviseBtn, updatePoester, delPoster, find,getHot,getAll,findInfo};